# 23. 面向对象初始


# 面向对象

什么是对象,面向对象分为,类跟对象二种

大神们一直说,学习面向对象,一定要用上帝思维去学


那什么是类

类,具有相同属性和技能的一类事物,简单来说就是一个大类,像人,人的大类就是人类,人类这类就包含了所有人


那什么是对象

对象。简单来说就是指单独的对象,比如,自己就是一个对象,自己的大类就是人类


# 面向对象写法

class 类名:
    ##类体:分为二部分:变量部分,方法(函数)部分
    变量 = 变量
    def 函数名(self): ## self类中默认函数的第一个位置参数
        函数体


# 站在类的角度来操作

class so:
    name = "人类"
    age = "一百岁左右"
    faile = "信仰"

    def wo(self):
        print("人与人的区别到底是什么")

    def eo(self):
        print("你说的,明天会更好")

# 查看类中的所有内容 - dict

print(so.__dict__)

执行结果:
{'__module__': '__main__', 'name': '人类', 'age': '一百岁左右', 'faile': '信仰', 'wo': <function so.wo at 0x0000015A0899BAE8>, 'eo': <function so.eo at 0x0000015A0899BD90>, '__dict__': <attribute '__dict__' of 'so' objects>, '__weakref__': <attribute '__weakref__' of 'so' objects>, '__doc__': None}

​ 以上实例,使用dict函数来查看类中的所有内容


# 也可以使用__dict__ 来操作

注意:因dict操作类只能只读权限,所以一般只是用__dict__来查看类中的所有内容

print(so.__dict__["name"])

执行结果:
人类

# 使用 . 来操作类的内容

. 符号,也被称为万能的点 .

可以使用 . 来能对类中的变量进行增删改查操作


# 查找

print(so.name)

执行结果:
人类

# 使用类名来查看类中方法

一般人不会使用类名来查看类中的方法

print(so.wo(1))

执行结果:
人与人的区别到底是什么
None

# 增加

so.mag = "梦想"
print(so.mag)

执行结果:
梦想

# 修改

so.age = "一百二十岁"
print(so.age)

执行结果:
一百二十岁

# 删除

del so.faile
print(so.__dict__)

执行结果:
{'__module__': '__main__', 'name': '人类', 'age': '一百岁左右', 'wo': <function so.wo at 0x000002348916BAE8>, 'eo': <function so.eo at 0x000002348916BD90>, '__dict__': <attribute '__dict__' of 'so' objects>, '__weakref__': <attribute '__weakref__' of 'so' objects>, '__doc__': None}


# 站在对象的角度来操作

class so:
    name = "人类"
    age = "一百岁左右"
    faile = "信仰"

    def __init__(self,nameb,ageb,faileb):
        self.nameb = nameb
        self.ageb = ageb
        self.faileb = faileb
        print(self)
        print("__init__函数是一个类中默认执行的函数,只要类被执行,这函数默认执行")

    def wo(self):
        print("人与人的区别到底是什么")

    def eo(self):
        print("你说的,明天会更好")

# self参数

这里要先说一个点

类中的办法也就是函数,创建的时候都会默认带有self参数,这参数是用来接收内存地址的,也不是固定是这个参数来接收的,但默认是第一个参数来接收

ll = so(1,"江心",18,"唯我")
print(ll)

执行结果:
__init__() takes 4 positional arguments but 5 were given

​ 以上实例,报错,为什么会报错,报错结果的意思是:init_()接受4个位置参数,但给出了5个,因为第一个参数是用 来接收内存地址的,默认是有数据的


# 实例化对象

实例化对象也称为实例化过程,指的就是创建一个对象的过程

ll = so("江心",18,"唯我")
print(ll)

执行结果:
<__main__.so object at 0x00000297446DABE0>
__init__函数是一个类中默认执行的函数,只要类被执行,这函数默认执行
<__main__.so object at 0x00000297446DABE0>


注意:当类加上()执行时,会产生一个名称空间,这过程也被称为实例化过程
	 so类要赋值给ll变量时,先要把自身用执行的先执行一遍,在返回内存地址给ll变量,这时我们就可以拿ll变量来操作

# 总结一下

  1. 类名+()执行会产生一个实例(对象,对象空间)
  2. 自动执行类中的__init__方法,将对象空间传给__init__的self参数,就是把内存地址传给了self参数
  3. 给对象封闭相应的属性

# 使用__dict__来查看相对应的全部方法

ll = so("江心",18,"唯我")
print(ll.__dict__)

执行结果:
<__main__.so object at 0x000002D4209DAC50>
__init__函数是一个类中默认执行的函数,只要类被执行,这函数默认执行
{'nameb': '江心', 'ageb': 18, 'faileb': '唯我'}

# 使用 . 来操作对象

. 符号,也被称为万能的点 .

可以使用 . 来能对对象中的变量进行增删改查等操作


# 查找

ll = so("江心",18,"唯我")
print(ll.nameb)

执行结果:
<__main__.so object at 0x000002937B50AC50>
__init__函数是一个类中默认执行的函数,只要类被执行,这函数默认执行
江心

# 增加

ll = so("江心",18,"唯我")
ll.song = "自定"
print(ll.song)

执行结果:
<__main__.so object at 0x000001E051A1AC88>
__init__函数是一个类中默认执行的函数,只要类被执行,这函数默认执行
自定

# 修改

ll = so("江心",18,"唯我")
ll.nameb = "江凡"
print(ll.nameb)

执行结果:
<__main__.so object at 0x00000144DD1DAC50>
__init__函数是一个类中默认执行的函数,只要类被执行,这函数默认执行
江凡

# 删除

ll = so("江心",18,"唯我")
del ll.nameb
print(ll.__dict__)

执行结果:
<__main__.so object at 0x000001B0529CAC50>
__init__函数是一个类中默认执行的函数,只要类被执行,这函数默认执行
{'ageb': 18, 'faileb': '唯我'}

# 使用对象来调取类中的方法

ll = so("江心",18,"唯我")
ll.wo()

执行结果:
<__main__.so object at 0x000002148B82AC18>
__init__函数是一个类中默认执行的函数,只要类被执行,这函数默认执行
人与人的区别到底是什么